package top.ochiamalu.aioj.controller;

import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import top.ochiamalu.aioj.common.BaseResponse;
import top.ochiamalu.aioj.domain.dto.config.UpdateCarouselDTO;
import top.ochiamalu.aioj.domain.dto.config.UpdateStudyPlanDTO;
import top.ochiamalu.aioj.domain.dto.config.UpdateToolbarSetDTO;
import top.ochiamalu.aioj.domain.vo.config.CarouselVO;
import top.ochiamalu.aioj.service.ConfigService;
import top.ochiamalu.aioj.util.ResultUtils;

import javax.annotation.Resource;
import java.util.List;

/**
 * 配置控制器
 *
 * @author ochiamalu
 * @date 2025/02/17
 */
@RestController
@RequestMapping("/configs")
public class ConfigController {

    @Resource
    private ConfigService configService;

    /**
     * 得到轮播图
     *
     * @return {@link BaseResponse }<{@link List }<{@link CarouselVO }>>
     */
    @GetMapping("/carousel")
    public BaseResponse<List<CarouselVO>> getCarousel() {
        List<CarouselVO> carouselList = configService.getCarousel();
        return ResultUtils.success(carouselList);
    }

    /**
     * 更新轮播图
     *
     * @param updateCarouselDTO 更新轮播图DTO
     * @return {@link BaseResponse }<{@link Boolean }>
     */
    @PostMapping("/carousel")
    @SaCheckPermission("config:carousel:update")
    public BaseResponse<Boolean> updateCarousel(@RequestBody UpdateCarouselDTO updateCarouselDTO) {
        configService.updateCarousel(updateCarouselDTO);
        return ResultUtils.success(true);
    }

    /**
     * 更新学习计划
     *
     * @param updateStudyPlanDTO 更新研究计划dto
     * @return {@link BaseResponse }<{@link Boolean }>
     */
    @PostMapping("/studyPlan")
    @SaCheckPermission("config:studyPlan:update")
    public BaseResponse<Boolean> updateStudyPlan(@RequestBody UpdateStudyPlanDTO updateStudyPlanDTO) {
        configService.updateStudyPlan(updateStudyPlanDTO);
        return ResultUtils.success(true);
    }

    /**
     * 更新工具栏题集
     *
     * @param updateToolbarSetDTO 更新工具栏题集DTO
     * @return {@link BaseResponse }<{@link Boolean }>
     */
    @PostMapping("/toolbar/set")
        @SaCheckPermission("config:toolbarSet:update")
    public BaseResponse<Boolean> updateToolbarSet(@RequestBody UpdateToolbarSetDTO updateToolbarSetDTO) {
        configService.updateToolbarSet(updateToolbarSetDTO);
        return ResultUtils.success(true);
    }
}
